#include <iostream>
#include "lcddevice.h"
#include "bmp.h"
#include <vector>
#include <map>
extern "C"
{
#include <stdio.h>
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/input.h>
#include <iostream>
#include "linux/fb.h"
}

using namespace std;

#define ROWS 14 // 棋盘横向格子数
#define COLS 14 // 棋盘纵向格子数
#define GRID_SIZE_x 43  // 格子横坐标大小
#define GRID_SIZE_y 32 // 格子纵坐标大小
#define XOFFSET 20 // 棋盘起始位置 横坐标
#define YOFFSET 18 // 棋盘起始位置 纵坐标

#define WHITE 1;
#define BLACK 0;

// 定义坐标点的数据类型
typedef pair<int, int> Coordinate;

// 创建一个容器来保存坐标点
vector<Coordinate> coordinates;

// 传入触摸屏位置坐标，转换为棋盘坐标（15*15）
void true_xy(int *get_x, int *get_y) 
{
    int x; // 棋子正确的x坐标
    int y; // 棋子正确的y坐标

    float a = (float)(*get_x - XOFFSET) / (float)GRID_SIZE_x;
    x = (*get_x - XOFFSET) / GRID_SIZE_x;
    float a1 = (float)x + 0.5;
    if (a > (a1)) // 如果大于0.5
    {
        x = (x + 1) * GRID_SIZE_x + XOFFSET;
    }
    else
    {
        x = x * GRID_SIZE_x + XOFFSET;
    }

    float b = (float)(*get_y - YOFFSET) / (float)GRID_SIZE_y;
    y = (*get_y - YOFFSET) / GRID_SIZE_y;
    float b1 = (float)y + 0.5;
    if (b > (b1)) // 如果大于0.5
    {
        y = (y + 1) * GRID_SIZE_y + YOFFSET;
    }
    else
    {
        y = y * GRID_SIZE_y + YOFFSET;
    }

    x = (x - XOFFSET) / GRID_SIZE_x;
    y = (x - YOFFSET) / GRID_SIZE_y;

    *get_x = x;
    *get_y = y; // get_x、get_y 此时为棋盘坐标
}
